<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>todoList</title>
    <style>
        input {
            outline: none;
        }
    </style>
</head>

<body>
    <div id="app">
        <!-- 用户输入内容 -->
        <writing v-model="ipt" @handlerclick="handlerIpt">
            <template v-slot:todo>
                <!-- 渲染用户内容 -->
                <!-- 1.渲染未完成-->
                <h2>未完成的事情</h2>
                <div v-for="item in unfinishList">
                    <input type="checkbox" @click.prevent="handlerCheck(item)"> {{item.contents}}
                    <button @click="del(item)">删除</button>
                </div>


            <!-- 2.渲染已完成 -->
            <h2>已完成的事情</h2>
            <div v-for="item in finishList">
                <input type="checkbox" checked @click.prevent="handlerCheck(item)"> {{item.contents}}
                <button @click="del(item)">删除</button>
            </div>
            </template>
        </writing>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        let writing = {
            props: ["value"],
            template: `
                        <div>
                            <input type="text" :value="value"  @keyup.enter="$emit('handlerclick',$event.target.value)" autofocus>
                            <slot name="todo"></slot>
                        </div>
                      `
        };

        let todo = {
            template: `
                        <div>
                            <slot name="todo"></slot>
                        </div>
                      `
        };

        // let notodo = {
        //     template: `
        //                 <div>
        //                     <slot name="notodo"></slot>
        //                 </div>
        //               `
        // }

        let vm = new Vue({
            el: '#app',
            components: {
                writing
            },
            data: {
                ipt: '',
                list: [{
                    id: 0,
                    contents: '吃饭',
                    isChecked: false
                }, {
                    id: 1,
                    contents: '水饺',
                    isChecked: true
                }]
            },
            computed: {
                unfinishList() {
                    return this.list.filter(ele => ele.isChecked === false)
                },
                finishList() {
                    return this.list.filter(ele => ele.isChecked === true)
                }
            },
            methods: {
                handlerIpt(data) {
                    this.ipt = data;
                    if (!this.ipt) return;
                    this.list.push({
                        id: this.list.length,
                        contents: this.ipt,
                        isChecked: false
                    });
                    this.ipt = "";
                },
                handlerCheck(item) {
                    // this.list[item.id].isChecked = !item.isChecked;
                    item.isChecked = !item.isChecked;
                },
                del(item) {
                    // this.list.splice(item.id, 1);
                    this.list.splice(this.list.indexOf(item), 1);

                    //因为删除之后，id是不会动态的变化
                    //重新排序，给id动态赋值，为了后续删除
                    this.list.forEach((ele, index) => {
                        ele.id = index;
                    });
                }
            }
        })
    </script>
</body>

</html>